From 019dab7c38a0891f494749e9e8fb27c30e8a5f25 Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Tue, 9 Feb 2016 15:30:00 +0100 Subject: [PATCH] gtkmagnifier: Avoid a crash if the inspected widget is finalized If the inspected widget is finalized and we then try to disconnect from its signals we'll crash. https://bugzilla.gnome.org/show_bug.cgi?id=761775 --- gtk/gtkmagnifier.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/gtk/gtkmagnifier.c b/gtk/gtkmagnifier.c index e83d3066fe..29905fb584 100644 --- a/gtk/gtkmagnifier.c +++ b/gtk/gtkmagnifier.c @@ -204,7 +204,8 @@ disconnect_resize_handler (GtkMagnifier *magnifier) if (priv->resize_handler) { - g_signal_handler_disconnect (priv->inspected, priv->resize_handler); + if (priv->inspected) + g_signal_handler_disconnect (priv->inspected, priv->resize_handler); priv->resize_handler = 0; } } @@ -239,7 +240,8 @@ disconnect_draw_handler (GtkMagnifier *magnifier) if (priv->draw_handler) { - g_signal_handler_disconnect (priv->inspected, priv->draw_handler); + if (priv->inspected) + g_signal_handler_disconnect (priv->inspected, priv->draw_handler); priv->draw_handler = 0; } } @@ -343,7 +345,13 @@ _gtk_magnifier_set_inspected (GtkMagnifier *magnifier, disconnect_draw_handler (magnifier); disconnect_resize_handler (magnifier); + if (priv->inspected) + g_object_remove_weak_pointer (G_OBJECT (priv->inspected), + (gpointer *) &priv->inspected); priv->inspected = inspected; + if (priv->inspected) + g_object_add_weak_pointer (G_OBJECT (priv->inspected), + (gpointer *) &priv->inspected); connect_draw_handler (magnifier); connect_resize_handler (magnifier); -- 2.30.2